package com.ruoyi.quartz.task;

import com.ruoyi.system.domain.Product;
import com.ruoyi.system.service.IOrderService;
import com.ruoyi.system.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 定时任务调度测试
 * 
 * @author ruoyi
 */
@Component("ryTask")
public class RyTask
{

    @Autowired
    private IOrderService orderService;

    @Autowired
    private IProductService productService;

    /**
     * 对那些抢到商品，但是十分钟内部没有完成支付的订单进行处理
     * 并且要确保同时成功，同时失败
     */
    @Transactional(rollbackFor =Exception.class)
    public void rollBackForOrder() throws Exception{
        // 获取那些超时没有支付的订单（排它锁）同时修改其订单状态为已超时，并对应的商品ID，以及对应的商品数量
        List<Map<String,Object>> mapList = orderService.changOrderStatus();
        // 使用循环获取商品,使用其方法（乐观锁）对已售数量进行修改2
        if (!mapList.isEmpty()){
            for (Map<String, Object> map : mapList) {
                // 先查该商品ID对应的商品
                Product product = productService.selectProductById(map.get("key").toString());
                // 根据该实体对象和版本号version去更新库存
                productService.changProductSale(product.getId(),product.getVersion(),Integer.parseInt(map.get("value").toString()));
            }
        }
    }

}
